package main

import "fmt"

// https://studygolang.com/pkgdoc 	//go中文文档
func main() {
	// map:
	// Go语言中提供的映射关系容器为map。其内部使用 散列表（hash）实现
	// map是一种无序的基于 key-value的数据结构，Go语言中的map是引用类型
	// 必须初始化才能使用
	// map定义语法如下
	// map[KeyType]ValueType

	var m1 map[string]int
	fmt.Println(m1 == nil)        // 此时还没有初始化 没有在内存中开辟空间
	m1 = make(map[string]int, 10) // 要估算好该map的容量，避免在程序运行期间再动态扩容
	m1["理想"] = 18
	m1["jiwuming"] = 35

	fmt.Println(m1)
	fmt.Println(m1["娜扎"]) // 如果不存在这个key 拿到对应值类型的零值

	// 约定成俗用ok接受返回的布尔值 通常用👇方法
	value, ok := m1["娜扎"]
	if !ok {
		fmt.Println("查无此key")
	} else {
		fmt.Println(value)
	}
	// map的遍历
	for k, v := range m1 {
		fmt.Println(k, v)
	}
	// 只遍历key
	for k := range m1 {
		fmt.Println(k)
	}
	// 只遍历value
	for _, v := range m1 {
		fmt.Println(v)
	}
	// 删除
	// go doc builtin.delete 看文档
	delete(m1, "jiwuming")
	fmt.Println(m1)
	delete(m1, "沙河") // 删除不存在的key
}
